package cn.tedu.charging.cost.pojo.po;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

import java.math.BigDecimal;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
@Document(indexName = "charging_data_2407")
public class ChargingDataPO {
    @Id
    String id;

    /**
     * 次数
     */
    Integer count;

    /**
     * 订单号
     */
    String orderNo;

    /**
     * 用户id
     */
    Integer userId;

    /**
     * 枪id
     */
    Integer gunId;

    /**
     * 总费用
     */
    BigDecimal total;

    /**
     * 开始时间
     * 开始时间可以是
     * 订单创建的时间 也可以是 设备第一次同步的时间
     */
    Long startTime;

    /**
     * 通过充血模型
     *
     * 设置总费用
     * @param total
     */
    public void setTotal(BigDecimal total) {
        if (isFirst()){
            this.total = total;
        }else {
            this.total = this.total.add(total);
        }
    }

    /**
     * 充电度数
     */
    Float chargingCapacity;

    public Float getChargingCapacity(Float chargingCapacity) {
        // chargingCapacity 是同步的充电度数（包括上一次的)
        if (isFirst()){
            return chargingCapacity;
        }else {
            return chargingCapacity-this.chargingCapacity;
        }
    }

    /**
     * 是否是第一次
     * 充血模型 在POJO 数据类 中添加方法 增加了部分业务方法
     * 贫血模型 在POJO 数据类 中不添加方法 只有属性 没有业务方法
     *
     * 又有数据 又有业务方法
     * DDD 领域驱动设计
     * @return
     */
    public Boolean isFirst(){
        return count==1;
    }
}
